package com.tosee.logic.impl;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.commons.lang.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.jdom2.Document;
import org.springframework.stereotype.Service;

import com.tosee.logic.AbstractBusinessLogic;
import com.tosee.logic.IAllocineBusinessLogic;
import com.tosee.model.allocine.AlloEpisode;
import com.tosee.model.allocine.AlloRecherche;
import com.tosee.model.allocine.AlloSaison;
import com.tosee.model.allocine.AlloSerie;
import com.tosee.model.dto.RechercheDto;
import com.tosee.utils.ConstantesAllocine;

/**
 * Classe BL serie
 * 
 * @author RobinT
 */
@Service
public class AllocineBusinessLogic extends AbstractBusinessLogic implements IAllocineBusinessLogic {

    /**
     * LOGGER.
     */
    private static final Log LOG = LogFactory.getLog(AllocineBusinessLogic.class);

    @Override
    public List<AlloSerie> getSeriesLightByRechercheNom(RechercheDto _rechercheDto) {

        List<AlloSerie> retour = null;

        if(_rechercheDto != null && StringUtils.isNotBlank(_rechercheDto.getNom())) {

            Map<String, String> map = new HashMap<String, String>();
            map.put(ConstantesAllocine.CODE_CHAINE, _rechercheDto.getNom());
            map.put(ConstantesAllocine.CODE_PARTENAIRE, ConstantesAllocine.VALEUR_CODE_PARTENAIRE);
            map.put(ConstantesAllocine.CODE_FILTER, ConstantesAllocine.VALEUR_CODE_FILTER);
            map.put(ConstantesAllocine.CODE_FORMAT, ConstantesAllocine.VALEUR_CODE_FORMAT_XML);

            Document doc = getDaoProvider().getAllocineDao().getInfo(map, ConstantesAllocine.URL_API_RECHERCHE);

            AlloRecherche rech = getDaoProvider().getAllocineDao().parseDocumentToResultListSeries(doc);
            retour = rech.getListeSerie();
        }

        return retour;

    }

    @Override
    public AlloSerie getSerieInfoByRechercheCode(RechercheDto _rechercheDto) {

        AlloSerie retour = null;

        if(_rechercheDto != null && _rechercheDto.getCode() != null) {

            Map<String, String> map = new HashMap<String, String>();
            map.put(ConstantesAllocine.CODE_CODE, _rechercheDto.getCode() + "");
            map.put(ConstantesAllocine.CODE_PARTENAIRE, ConstantesAllocine.VALEUR_CODE_PARTENAIRE);
            map.put(ConstantesAllocine.CODE_PROFILE, ConstantesAllocine.VALEUR_PROFILE_LARGE);
            map.put(ConstantesAllocine.CODE_FORMAT, ConstantesAllocine.VALEUR_CODE_FORMAT_XML);

            Document doc = getDaoProvider().getAllocineDao().getInfo(map, ConstantesAllocine.URL_API_DETAIL_SERIE);

            retour = getDaoProvider().getAllocineDao().parseDocumentToResultSerie(doc);

        }

        return retour;
    }

    @Override
    public AlloSaison getSaisonInfoByRechercheCode(RechercheDto _rechercheDto) {

        AlloSaison retour = null;

        if(_rechercheDto != null && _rechercheDto.getCode() != null) {

            Map<String, String> map = new HashMap<String, String>();
            map.put(ConstantesAllocine.CODE_CODE, _rechercheDto.getCode() + "");
            map.put(ConstantesAllocine.CODE_PARTENAIRE, ConstantesAllocine.VALEUR_CODE_PARTENAIRE);
            map.put(ConstantesAllocine.CODE_PROFILE, ConstantesAllocine.VALEUR_PROFILE_LARGE);
            map.put(ConstantesAllocine.CODE_FORMAT, ConstantesAllocine.VALEUR_CODE_FORMAT_XML);

            Document doc = getDaoProvider().getAllocineDao().getInfo(map, ConstantesAllocine.URL_API_SAISON);

            retour = getDaoProvider().getAllocineDao().parseDocumentToResultSaison(doc);
        }
        return retour;
    }

    @Override
    public AlloEpisode getEpisodeInfo(RechercheDto _rechercheDto) {

        AlloEpisode retour = null;

        if(_rechercheDto != null && _rechercheDto.getCode() != null) {

            Map<String, String> map = new HashMap<String, String>();
            map.put(ConstantesAllocine.CODE_CODE, _rechercheDto.getCode() + "");
            map.put(ConstantesAllocine.CODE_PARTENAIRE, ConstantesAllocine.VALEUR_CODE_PARTENAIRE);
            map.put(ConstantesAllocine.CODE_PROFILE, ConstantesAllocine.VALEUR_PROFILE_LARGE);
            map.put(ConstantesAllocine.CODE_FORMAT, ConstantesAllocine.VALEUR_CODE_FORMAT_XML);

            Document doc = getDaoProvider().getAllocineDao().getInfo(map, ConstantesAllocine.URL_API_EPISODE);

            retour = getDaoProvider().getAllocineDao().parseDocumentToResultEpisode(doc);
        }
        return retour;
    }

}
